class Solution {
public:
    void duplicateZeros(vector<int>& arr) {
        //倒着复写，先要找到复写的最后一个元素位置即cur
        int dest=-1,cur=0,n=arr.size();
        while(cur<n)
        {
            if(arr[cur])dest++;
            else  dest+=2;
            if(dest>=n-1)break;
            cur++;
        }
        //特殊情况，dest走到n位置。
        if(dest==n)
        {
            arr[n-1]=0;
            cur--;dest-=2;
        }
        //从后往前，完成复写
        while(cur>=0)
        {
            if(arr[cur])arr[dest--]=arr[cur--];
            else
            {
                arr[dest--]=0;
                arr[dest--]=0;
                cur--;
            }
        }

    }
};